<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='UTF-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <meta name='viewport' content='width=device-width, initial-scale=1.0'>
    <title>Document</title>
    <script src='../vue.js'></script>
</head>
<body>
    <div id='app'>
        <input type="text" v-model="search">
        <ul>
            <li v-for="item in newPerson" :key="item.id">
                {{item.name}}---{{item.age}}
            </li>
        </ul>
    </div>
    <script>
        /* 
        过滤的时候不要修改数据 而是得到一个新的值 保留数据
        */
        Vue.config.productionTip = false;
        const vm = new Vue({
            el:'#app',
            data(){
                return {
                search:'',
                person:[
                    {id:'001',name:'laowang',age:18},
                    {id:'002',name:'dawang',age:15},
                    {id:'003',name:'xiaowang',age:10},
                    {id:'004',name:'hang',age:19}
                ],
                newPerson:[]
            }
            },
            watch:{
                search:{
                    immediate:true,
                    handler(newValue){
                        /*
                        filter用于对数组进行过滤。
                        它创建一个新数组，新数组中的元素是通过检查指定数组中符合条件的所有元素。
                        filter()不会对空数组进行检测、不会改变原始数组
                         其中，第一个参数是函数,函数 function 为必须，数组中的每个元素都会执行这个函数。且如果返回值为 true，则该元素被保留；
                         函数的第一个参数 也为必须，代表当前元素的值。
                        */
                        console.log(newValue,'newValue')
                        this.newPerson=this.person.filter((item)=>{
                            //includes() 方法用于判断字符串是否包含指定的子字符串。
                            //如果找到匹配的字符串则返回 true，否则返回 false。
                            return item.name.includes(newValue)
                        })
                    }
                }
            }
    })
    </script>
</body>
</html>